﻿IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ReporteGraficoVentas')
	BEGIN
		DROP  Procedure  ReporteGraficoVentas
	END

GO

CREATE Procedure ReporteGraficoVentas

	(
		@FechaDesde datetime,
		@FechaHasta datetime,
		@ClienteID int = NULL,
		@ProductoID int = NULL,
		@TipoVendible int = NULL
	)

AS

	SELECT     
		CASE
			WHEN MONTH(dbo.Ventas.fechaEmision) = 1 THEN 'Enero'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 2 THEN 'Febrero'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 3 THEN 'Marzo'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 4 THEN 'Abril'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 5 THEN 'Mayo'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 6 THEN 'Junio'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 7 THEN 'Julio'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 8 THEN 'Agosto'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 9 THEN 'Septiembre'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 10 THEN 'Octubre'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 11 THEN 'Noviembre'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 12 THEN 'Diciembre'
		END AS Mes, 
        dbo.Productos.nombre AS Producto, 
        SUM(dbo.DetallesVentasProductos.cantidad) AS Cantidad, 
        SUM(dbo.DetallesVentasProductos.cantidad * dbo.DetallesVentasProductos.precioUnitario) AS Total
	FROM dbo.Ventas 
	INNER JOIN dbo.DetallesVentasProductos ON dbo.Ventas.ventaID = dbo.DetallesVentasProductos.ventaID 
	INNER JOIN dbo.Productos ON dbo.DetallesVentasProductos.productoID = dbo.Productos.productoID 
	WHERE (dbo.Ventas.estado = 'R') AND
		(dbo.Ventas.fechaEmision >= @FechaDesde AND dbo.Ventas.fechaEmision <= @FechaHasta) AND
		CASE 
			WHEN @ClienteID IS NULL THEN 1
			WHEN @ClienteID = dbo.Ventas.clienteID THEN 1
			ELSE 0
		END = 1 AND
		CASE 
			WHEN @TipoVendible IS NULL THEN 1
			WHEN @TipoVendible = 1 THEN
			CASE 
				WHEN @ProductoID IS NULL THEN 1
				WHEN @ProductoID = dbo.Productos.productoID THEN 1
				ELSE 0
			END
			ELSE 0
		END = 1
	GROUP BY dbo.Productos.nombre, YEAR(dbo.Ventas.fechaEmision), MONTH(dbo.Ventas.fechaEmision) 
	UNION
	SELECT     
		CASE
			WHEN MONTH(dbo.Ventas.fechaEmision) = 1 THEN 'Enero'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 2 THEN 'Febrero'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 3 THEN 'Marzo'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 4 THEN 'Abril'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 5 THEN 'Mayo'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 6 THEN 'Junio'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 7 THEN 'Julio'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 8 THEN 'Agosto'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 9 THEN 'Septiembre'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 10 THEN 'Octubre'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 11 THEN 'Noviembre'
			WHEN MONTH(dbo.Ventas.fechaEmision) = 12 THEN 'Diciembre'
		END AS Mes, 
        dbo.Insumos.nombre AS Producto, 
        SUM(dbo.DetallesVentasInsumos.cantidad) AS Cantidad, 
        SUM(dbo.DetallesVentasInsumos.cantidad * dbo.DetallesVentasInsumos.precioUnitario) AS Total
	FROM dbo.Ventas 
	INNER JOIN dbo.DetallesVentasInsumos ON dbo.Ventas.ventaID = dbo.DetallesVentasInsumos.ventaID 
	INNER JOIN dbo.Insumos ON dbo.DetallesVentasInsumos.insumoID = dbo.Insumos.insumoID 
	WHERE (dbo.Ventas.estado = 'R') AND
		(dbo.Ventas.fechaEmision >= @FechaDesde AND dbo.Ventas.fechaEmision <= @FechaHasta) AND
		CASE 
			WHEN @ClienteID IS NULL THEN 1
			WHEN @ClienteID = dbo.Ventas.clienteID THEN 1
			ELSE 0
		END = 1 AND
		CASE 
			WHEN @TipoVendible IS NULL THEN 1
			WHEN @TipoVendible = 0 THEN
			CASE 
				WHEN @ProductoID IS NULL THEN 1
				WHEN @ProductoID = dbo.Insumos.insumoID THEN 1
				ELSE 0
			END
			ELSE 0
		END = 1
	GROUP BY dbo.Insumos.nombre, YEAR(dbo.Ventas.fechaEmision), MONTH(dbo.Ventas.fechaEmision)

GO

GRANT EXEC ON ReporteGraficoVentas TO PUBLIC

GO

